<?php

namespace App\Admin\Form\Field;

trait PlainInput
{
    /**
     * 输入框前面追加的显示内容
     *
     * @var
     */
    protected $prepend;

    /**
     * 是否把往前追加的显示内容,自动追加到值里面去
     *
     * @var bool
     */
    protected $prependValue = false;

    /**
     * 输入框后面追加的显示内容
     *
     * @var
     */
    protected $append;

    protected $appendValue = false;

    /**
     * 给输入框前面追加显示内容
     *
     * @param string $string
     * @param bool   $prependValue 是否把该值追加输入框的值中
     * @return $this
     */
    public function prepend($string, $prependValue = false)
    {
        if (is_null($this->prepend)) {
            $this->prepend = $string;
        }

        $this->prependValue = $prependValue;

        return $this;
    }

    /**
     * 给输入框后面追加显示内容
     *
     * @param string $string
     * @param bool   $appendValue 是否把该值追加输入框的值中
     * @return $this
     */
    public function append($string, $appendValue = false)
    {
        if (is_null($this->append)) {
            $this->append = $string;
        }

        $this->appendValue = $appendValue;

        return $this;
    }

    /**
     * 初始化input输入框,比如设置模板等
     */
    protected function initPlainInput()
    {
        if (empty($this->view)) {
            $this->view = 'admin.form.input';
        }

        if (isset($this->append) && $this->append != '') {
            $this->setElementClass('no-right-border');
        }
    }

    /**
     * 设置input输入框的html元素属性
     *
     * @param $attribute
     * @param $value
     * @return $this
     */
    protected function defaultAttribute($attribute, $value)
    {
        if (!array_key_exists($attribute, $this->attributes)) {
            $this->attribute($attribute, $value);
        }

        return $this;
    }

    public function prepare($value)
    {
        if ($this->prependValue) {
            $value = $this->prepend . $value;
        }

        if ($this->appendValue) {
            $value .= $this->append;
        }

        return $value;
    }

    /**
     * @inheritdoc
     */
    public function value($value = null)
    {
        if (is_null($value)) {
            if (is_null($this->default)) {
                // $this->default = \Request::get($this->column);
            }

            $value = is_null($this->value) ? $this->getDefault() : $this->value;
            if ($this->prependValue) {
                $value = ltrim($value, $this->prepend);
            }

            if ($this->appendValue) {
                $value = rtrim($value, $this->prepend);
            }

            return $value;
        }

        $this->value = $value;

        return $this;
    }
}
